package com.junmoo.www.handler;

import com.alibaba.fastjson.JSONObject;
import com.junmoo.www.utils.AuthUtil;
import com.junmoo.www.utils.WxConstant;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;


import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;
@Controller
@RequestMapping("wechat")
public class WeChatController {
    /**
     * 请求code
     * appid	        是	公众号的唯一标识
     * redirect_uri	    是	授权后重定向的回调链接地址，请使用urlencode对链接进行处理
     * response_type	是	返回类型，请填写code
     * scope	        是	应用授权作用域，snsapi_base （不弹出授权页面，直接跳转，只能获取用户openid），snsapi_userinfo （弹出授权页面，可通过openid拿到昵称、性别、所在地。并且，即使在未关注的情况下，只要用户授权，也能获取其信息）
     * state	        否	重定向后会带上state参数，开发者可以填写a-zA-Z0-9的参数值，最多128字节
     * #wechat_redirect	是	无论直接打开还是做页面302重定向时候，必须带此参数
     * @param response
     * @throws IOException
     */
    @RequestMapping("wx_login")
    public void wxLogin(HttpServletResponse response) throws IOException {
        //这里是回调的url
        String redirect_uri = URLEncoder.encode(WxConstant.DOMAIN+"/wechat/callBack", "UTF-8");
        String url = "https://open.weixin.qq.com/connect/oauth2/authorize?" +
                "appid=APPID" +
                "&redirect_uri=REDIRECT_URI"+
                "&response_type=code" +
                "&scope=SCOPE" +
                "&state=STATE#wechat_redirect";
        response.sendRedirect(url.replace("APPID", WxConstant.APPID)
                .replace("REDIRECT_URI",redirect_uri)
                .replace("SCOPE","snsapi_userinfo"));
    }

    /**
     * 第二步：通过code换取网页授权access_token
     * @param request
     * @param response
     * @throws Exception
     */
    @RequestMapping("callBack")
    protected void deGet(HttpServletRequest request, HttpServletResponse response)throws Exception {
        //获取回调地址中的code
        String code = request.getParameter("code");
        //拼接url
        String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + WxConstant.APPID + "&secret="
                + WxConstant.APPSECRET + "&code=" + code + "&grant_type=authorization_code";
        JSONObject jsonObject = AuthUtil.doGetJson(url);
        //1.获取微信用户的openid
        String openid = jsonObject.getString("openid");
        //2.获取获取access_token
        String access_token = jsonObject.getString("access_token");
        String infoUrl = "https://api.weixin.qq.com/sns/userinfo?access_token=" + access_token + "&openid=" + openid
                + "&lang=zh_CN";
        //3.获取微信用户信息
        JSONObject userInfo = AuthUtil.doGetJson(infoUrl);
        //至此拿到了微信用户的所有信息,剩下的就是业务逻辑处理部分了
        //保存openid和access_token到session
        request.getSession().setAttribute("openid", openid);
        request.getSession().setAttribute("access_token", access_token);
        //去数据库查询此微信是否绑定过手机
//        UserVo user = userService.queryByOpenId(openid);
//        String mobile=user==null?"":user.getMobile();

//        if(null == mobile || "".equals(mobile)){
//            //如果无手机信息,则跳转手机绑定页面
//            response.sendRedirect("/front/register.html");
//        }else{
//            //否则直接跳转首页
//            response.sendRedirect("/front/index.html");
//        }
    }

}
